import type { ApiResponse, HandleApiErrorOptions } from '../types/common'
import { ResponseCode } from '../types/common'

// 默认的登出处理
function defaultHandleLogout() {
  uni.removeStorageSync('token')
  uni.removeStorageSync('userInfo')
  uni.reLaunch({ url: '/pages/login/index' })
}

// 显示错误信息
function showErrorMessage(message: string) {
  uni.showToast({
    title: message,
    icon: 'none',
    duration: 3000,
  })
}

// 统一的错误处理
export async function handleApiError(error: ApiResponse | Error, options: HandleApiErrorOptions = { showError: true }) {
  const handleErrorMessage = (message: string) => options.showError && showErrorMessage(message)

  // 处理普通的 Error 对象
  if (error instanceof Error) {
    handleErrorMessage(error.message)
    return error
  }

  // 处理 API 响应错误
  if ('code' in error) {
    const { code, message } = error

    // 处理特定错误码
    if (code === ResponseCode.Unauthorized) {
      (options.handleLogout || defaultHandleLogout)()
    }
    else if (code === ResponseCode.Forbidden) {
      handleErrorMessage('暂无权限访问')
    }
    else {
      handleErrorMessage(message || '请求失败')
    }
    return error
  }

  // 处理未知错误
  console.error('未知错误：', error)
  handleErrorMessage('发生未知错误')
  return error
}
